<?php
/*
* File: CaptchaSecurityImages.php
* Author: Simon Jarvis
* Copyright: 2006 Simon Jarvis
* Date: 03/08/06
* Updated: 07/02/07
* Requirements: PHP 4/5 with GD and FreeType libraries
* Link: http://www.white-hat-web-design.co.uk/articles/php-captcha.php
* 
* This program is free software; you can redistribute it and/or 
* modify it under the terms of the GNU General Public License 
* as published by the Free Software Foundation; either version 2 
* of the License, or (at your option) any later version.
* 
* This program is distributed in the hope that it will be useful, 
* but WITHOUT ANY WARRANTY; without even the implied warranty of 
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
* GNU General Public License for more details: 
* http://www.gnu.org/licenses/gpl.html
*
*/

class Captchasecurityimages {

	var $font = 'font/monofont.ttf';

	function generateCode($characters) {
		/* list all possible characters, similar looking characters and vowels have been removed */
		$possible = '23456789BCDFGHJKMNPQRSTVWXYZ';
		$code = '';
		$i = 0;
		while ($i < $characters) { 
			$code .= substr($possible, mt_rand(0, strlen($possible)-1), 1);
			$i++;
		}
		return $code;
	}
    
    function genCaptcha($img_width='120',$img_height='35',$characters='6'){
        $p = pathinfo(__FILE__);
        $this->font = $p['dirname'].'/font/monofont.ttf';
        $font_path = $this->font;
		$code = $this->generateCode($characters);
        
        if (function_exists('imagecreatetruecolor'))
        {
            $im = imagecreatetruecolor($img_width, $img_height);
        }
        else
        {
            $im = imagecreate($img_width, $img_height);
        }
                
        // -----------------------------------
        //  Assign colors
        // -----------------------------------
        
        $bg_color		= imagecolorallocate ($im, 255, 255, 255);
        $border_color	= imagecolorallocate ($im, 153, 102, 102);
        $text_color		= imagecolorallocate ($im, 204, 153, 153);
        $grid_color		= imagecolorallocate($im, 255, 182, 182);
        $shadow_color	= imagecolorallocate($im, 255, 240, 240);

        // -----------------------------------
        //  Create the rectangle
        // -----------------------------------
        
        ImageFilledRectangle($im, 0, 0, $img_width, $img_height, $bg_color);
        
        // -----------------------------------
        //  Create the spiral pattern
        // -----------------------------------
        
        $theta		= 1;
        $thetac		= 7;
        $radius		= 16;
        $circles	= 20;
        $points		= 32;

        // -----------------------------------
        //  Write the text
        // -----------------------------------
        $angle	= ($characters >= 6) ? rand(-($characters-6), ($characters-6)) : 0;
        $use_font = ($font_path != '' AND file_exists($font_path) AND function_exists('imagettftext')) ? TRUE : FALSE;

        if ($use_font == FALSE)
        {
            $font_size = 5;
            $x = rand(0, $img_width/($characters/3));
            $y = 0;
        }
        else
        {
            $font_size	= 16;
            $x = rand(0, $img_width/($characters/1.5));
            $y = $font_size+2;
        }

        for ($i = 0; $i < strlen($code); $i++)
        {
            if ($use_font == FALSE)
            {
                $y = rand(0 , $img_height/2);
                imagestring($im, $font_size, $x, $y, substr($code, $i, 1), $text_color);
                $x += ($font_size*2);
            }
            else
            {		
                $y = rand($img_height/2, $img_height-3);
                imagettftext($im, $font_size, $angle, $x, $y, $text_color, $font_path, substr($code, $i, 1));
                $x += $font_size;
            }
        }
        // -----------------------------------
        //  Create the border
        // -----------------------------------
        imagerectangle($im, 0, 0, $img_width-1, $img_height-1, $border_color);		
        $file = time();
        imagejpeg($im, APPPATH.'assets/captcha/'.$file.'.jpg');
        imagedestroy($im);
        $_SESSION['security_code'] = $code;
        return array('url'=>base_url().'application/assets/captcha/'.$file.'.jpg', 'code'=>$code);
    }
}
?>